#include<bits/stdc++.h>
using namespace std;
const int N=5005,mod=1e9+7;
int n,k,a[N],C[N][N],w[N],g[N][N],sum[N],t[N][1<<10],ans;
int f[N],sz[N],u[N],v[N];
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
inline void Mod(int &x){x>=mod?x-=mod:0;} 
int main(){
	freopen("water.in","r",stdin);
	freopen("water.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>k;
	for(int i=1;i<=k;++i) cin>>w[i];
	for(int i=C[0][0]=g[0][0]=sum[0]=1;i<=n;++i)
	for(int j=C[i][0]=1;j<=i;++j){
		Mod(C[i][j]=C[i-1][j-1]+C[i-1][j]);
		Mod(g[i][j]=(1ll*g[i-1][j]*j+g[i-1][j-1])%mod);
		Mod(sum[i]+=g[i][j]); 
	}
	for(int i=1;i<=n;++i){
		int l;cin>>l;
		while(l--){
			int x;cin>>x;
			a[i]|=1<<(x-1);
		}
	}
	for(int i=1;i<n;++i) cin>>u[i]>>v[i];
	for(int s=1;s<(1<<k);++s){
		for(int i=1;i<=n;++i){
			if((a[i]&s)==a[i]) f[i]=i,sz[i]=1;
			else f[i]=0;
		}
		for(int i=1;i<n;++i) if(f[u[i]]&&f[v[i]]){
			int x=find(u[i]),y=find(v[i]);
			sz[x]+=sz[y];
			f[y]=x;
		}
		for(int i=1;i<=n;++i) if(f[i]==i){
			for(int j=1;j<=sz[i];++j) Mod(t[j][s]+=C[sz[i]][j]);
		}
	} 
	for(int s=1;s<=n;++s){
		for(int o=1;o<(1<<k);o<<=1)
		for(int i=0;i<(1<<k);i+=o<<1)
		for(int j=0;j<o;++j) Mod(t[s][i+j+o]+=mod-t[s][i+j]);
		for(int z=0;z<(1<<k);++z)
			Mod(ans+=1ll*sum[n-s]*t[s][z]%mod*w[__builtin_popcount(z)]%mod);
	}
	cout<<ans;
	return 0;
}


